// 语法: newInstance(Fn, ...args)
// 功能: 创建Fn构造函数的实例对象

/**
 * 
 * @param {Function} Fn 
 * @param  {...any} args 
 * @returns 
 */
export function newInstance(Fn, ...args) {
  // 1. 创建一个新对象
  const obj = {};
  // 2. 修改函数内部 this 指向，指向新对象并执行
  const result = Fn.call(obj, ...args);
  // 3. 修改新对象的原型对象
  obj.__proto__ = Fn.prototype
  // 4. 返回新对象，
  // 如果 Fn 的返回值类型是一个Object，就返回结果，否则返回新创建的对象，与new的作用保持一致
  return result instanceof Object ? result : obj;
}